/**
 * 
 */
package com.ray.bean;

import lombok.Getter;
import lombok.Setter;

/**
* <p>Description: 考勤每人每日工资明细
* @author 王荣
*/
@Getter
@Setter
public class AttendDailySalaryDetailBean {
	private Integer id;
	private Integer userId;//用户id
	private Integer deptId;//用户部门id
	private Integer groupId;//考勤组id
	private Integer classId;//考勤班次id
	private String workdate;//日期
	private Integer monthWorkingDays;//足月工作天数
	private Double dailyWorkingHours;//日工作小时
	/** 足月工作小时 */
	private Double fullMonthlyWorkingHours;
	private Double monthlySalary;//月薪
	private Double dateSalary;//当日应得工资
	private Double hourlySalary;//时薪
	/** 当天有效工作时长 */
	private Double effectiveHours;
	/** 有效工资 */
	private Double effectiveSalary;
	private Double lateDeductions;//迟到扣款
	private Double earlyDeductions;//早退扣款
	private Double absentDeductions;//旷工扣款
	private Double absentRatio;//旷工扣款比例
	private Double absentHours;//旷工时长
	private Double leaveDeductions;//请假扣款
	private Double leaveRatio;//请假扣款比例
	private Double leaveHours;//请假时长
	private Double overtimeSalary;//加班工资
	private Double overtimeRatio;//加班工资比例
	private Double overtimeHours;//加班时长
	private Double weekendOvertimeHours;//休息日加班时长
	private Double weekendOvertimeSalary;//休息日加班工资
	private Double realSalary;//实际工资
	
	public AttendDailySalaryDetailBean() {}
	
	/**
	 * Builder构建器模式设置属性
	 * @author 王荣
	 */
	public static class Builder{
		private Integer userId;//用户id
		private Integer deptId;//用户部门id
		private Integer groupId;//考勤组id
		private Integer classId;//考勤班次id
		private String workdate;//日期
		private Integer monthWorkingDays;//足月工作天数
		private Double dailyWorkingHours;//日工作小时
		/** 足月工作小时 */
		private Double fullMonthlyWorkingHours;
		private Double monthlySalary;//月薪
		private Double dateSalary;
		private Double hourlySalary;//时薪
		/** 当天有效工作时长 */
		private Double effectiveHours;
		/** 有效工资 */
		private Double effectiveSalary;
		private Double lateDeductions;//迟到扣款
		private Double earlyDeductions;//早退扣款
		private Double absentDeductions;//旷工扣款
		private Double absentRatio;//旷工扣款比例
		private Double absentHours;//旷工时长
		private Double leaveDeductions;//请假扣款
		private Double leaveRatio;//请假扣款比例
		private Double leaveHours;//请假时长
		private Double overtimeSalary;//加班工资
		private Double overtimeRatio;//加班工资比例
		private Double overtimeHours;//加班时长
		private Double weekendOvertimeHours;//休息日加班时长
		private Double weekendOvertimeSalary;//休息日加班工资
		private Double realSalary;//实际工资
		
		/**
		 * 用户id
		 * @param userId
		 */
		public Builder userId(Integer userId) {
			this.userId = userId;
			return this;
		}
		/**
		 * 部门id
		 * @param deptId
		 */
		public Builder deptId(Integer deptId) {
			this.deptId = deptId;
			return this;
		}
		/**
		 * 考勤组id
		 * @param groupId
		 */
		public Builder groupId(Integer groupId) {
			this.groupId = groupId;
			return this;
		}
		/**
		 * 班次id
		 * @param classId
		 * @return
		 * @author 王荣
		 */
		public Builder classId(Integer classId) {
			this.classId = classId;
			return this;
		}
		/**
		 * 工作日
		 * @param workdate
		 */
		public Builder workdate(String workdate) {
			this.workdate = workdate;
			return this;
		}
		/**
		 * 足月工作天数
		 * @param monthWorkingDays
		 */
		public Builder monthWorkingDays(Integer monthWorkingDays) {
			this.monthWorkingDays = monthWorkingDays;
			return this;
		}
		/**
		 * 足日工时
		 * @param dailyWorkingHours
		 */
		public Builder dailyWorkingHours(Double dailyWorkingHours) {
			this.dailyWorkingHours = dailyWorkingHours;
			return this;
		}
		/**
		 * 足月工时
		 * @param fullMonthlyWorkingHours
		 */
		public Builder fullMonthlyWorkingHours(Double fullMonthlyWorkingHours) {
			this.fullMonthlyWorkingHours = fullMonthlyWorkingHours;
			return this;
		}
		/**
		 * 月薪
		 * @param monthlySalary
		 */
		public Builder monthlySalary(Double monthlySalary) {
			this.monthlySalary = monthlySalary;
			return this;
		}
		/**
		 * 当日应得工资
		 * @param dateSalary
		 * @return Builder
		 * @author 王荣
		 */
		public Builder dateSalary(Double dateSalary) {
			this.dateSalary = dateSalary;
			return this;
		}
		
		/**
		 * 设置时薪
		 * @param hourlySalary
		 */
		public Builder hourlySalary(Double hourlySalary) {
			this.hourlySalary = hourlySalary;
			return this;
		}
		/**
		 * 设置有效工作时长
		 * @param effectiveHours
		 */
		public Builder effectiveHours(Double effectiveHours) {
			this.effectiveHours = effectiveHours;
			return this;
		}
		/**
		 * 有效工作薪水
		 * @param effectiveSalary
		 */
		public Builder effectiveSalary(Double effectiveSalary) {
			this.effectiveSalary = effectiveSalary;
			return this;
		}
		/**
		 * 迟到扣款
		 * @param lateDeductions
		 */
		public Builder lateDeductions(Double lateDeductions) {
			this.lateDeductions = lateDeductions;
			return this;
		}
		/**
		 * 早退扣款
		 * @param earlyDeductions
		 */
		public Builder earlyDeductions(Double earlyDeductions) {
			this.earlyDeductions = earlyDeductions;
			return this;
		}
		/**
		 * 旷工扣款
		 * @param absentDeductions
		 */
		public Builder absentDeductions(Double absentDeductions) {
			this.absentDeductions = absentDeductions;
			return this;
		}
		/**
		 * 旷工扣款比率
		 * @param absentRatio
		 */
		public Builder absentRatio(Double absentRatio) {
			this.absentRatio = absentRatio;
			return this;
		}
		/**
		 * 旷工时长
		 * @param absentHours
		 */
		public Builder absentHours(Double absentHours) {
			this.absentHours = absentHours;
			return this;
		}
		/**
		 * 请假扣款
		 * @param leaveDeductions
		 */
		public Builder leaveDeductions(Double leaveDeductions) {
			this.leaveDeductions = leaveDeductions;
			return this;
		}
		/**
		 * 请假扣款比率
		 * @param leaveRatio
		 */
		public Builder leaveRatio(Double leaveRatio) {
			this.leaveRatio = leaveRatio;
			return this;
		}
		/**
		 * 请假时长
		 * @param leaveHours
		 */
		public Builder leaveHours(Double leaveHours) {
			this.leaveHours = leaveHours;
			return this;
		}
		/**
		 * 加班工资
		 * @param overtimeSalary
		 */
		public Builder overtimeSalary(Double overtimeSalary) {
			this.overtimeSalary = overtimeSalary;
			return this;
		}
		/**
		 * 加班工资比率
		 * @param overtimeRatio
		 */
		public Builder overtimeRatio(Double overtimeRatio) {
			this.overtimeRatio = overtimeRatio;
			return this;
		}
		/**
		 * 加班时长
		 * @param overtimeHours
		 */
		public Builder overtimeHours(Double overtimeHours) {
			this.overtimeHours = overtimeHours;
			return this;
		}
		/**
		 * 休息日加班时长
		 * @param weekendOvertimeHours
		 */
		public Builder weekendOvertimeHours(Double weekendOvertimeHours) {
			this.weekendOvertimeHours = weekendOvertimeHours;
			return this;
		}
		/**
		 * 休息日加班工资
		 * @param weekendOvertimeSalary
		 */
		public Builder weekendOvertimeSalary(Double weekendOvertimeSalary) {
			this.weekendOvertimeSalary = weekendOvertimeSalary;
			return this;
		}
		/**
		 * 实际薪水
		 * @param realSalary
		 */
		public Builder realSalary(Double realSalary) {
			this.realSalary = realSalary;
			return this;
		}
		
		public AttendDailySalaryDetailBean build() {
			return new AttendDailySalaryDetailBean(this);
		}
	}
	
	private AttendDailySalaryDetailBean(Builder builder) {
		userId = builder.userId;
		deptId = builder.deptId;
		groupId = builder.groupId;
		classId = builder.classId;
		workdate = builder.workdate;
		monthWorkingDays = builder.monthWorkingDays;
		dailyWorkingHours = builder.dailyWorkingHours;
		fullMonthlyWorkingHours = builder.fullMonthlyWorkingHours;
		monthlySalary = builder.monthlySalary;
		dateSalary = builder.dateSalary;
		hourlySalary = builder.hourlySalary;
		effectiveHours = builder.effectiveHours;
		effectiveSalary = builder.effectiveSalary;
		lateDeductions = builder.lateDeductions;
		earlyDeductions = builder.earlyDeductions;
		absentDeductions = builder.absentDeductions;
		absentRatio = builder.absentRatio;
		absentHours = builder.absentHours;
		leaveDeductions = builder.leaveDeductions;
		leaveRatio = builder.leaveRatio;
		leaveHours = builder.leaveHours;
		overtimeSalary = builder.overtimeSalary;
		overtimeRatio = builder.overtimeRatio;
		overtimeHours = builder.overtimeHours;
		weekendOvertimeHours = builder.weekendOvertimeHours;
		weekendOvertimeSalary = builder.weekendOvertimeSalary;
		realSalary = builder.realSalary;
	}
	
}
